<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="yT9zE" id="yT9zE"><span data-lake-id="u4893202f" id="u4893202f">典型回答</span></h1>
  <p data-lake-id="u534f403c" id="u534f403c"><br></p>
  <p data-lake-id="u0a6599a3" id="u0a6599a3"><span data-lake-id="u9a21aadd" id="u9a21aadd">使用消息队列的主要目的主要记住这几个关键词：</span><code data-lake-id="ufcb1fe2f" id="ufcb1fe2f"><span data-lake-id="u61064926" id="u61064926">解耦</span></code><span data-lake-id="u102a9774" id="u102a9774">、</span><code data-lake-id="uecdaee77" id="uecdaee77"><span data-lake-id="uceb7682c" id="uceb7682c">异步</span></code><span data-lake-id="u79909265" id="u79909265">、</span><code data-lake-id="u5d076707" id="u5d076707"><span data-lake-id="u4520eb99" id="u4520eb99">削峰填谷</span></code></p>
  <p data-lake-id="u40782a61" id="u40782a61"><span data-lake-id="u5ccd71cf" id="u5ccd71cf">​</span><br></p>
  <p data-lake-id="ua50dd13b" id="ua50dd13b"><strong><span data-lake-id="uf824c2a4" id="uf824c2a4">解耦</span></strong><span data-lake-id="u01d4d7b5" id="u01d4d7b5">：在一个复杂的系统中，不同的模块或服务之间可能需要相互依赖，如果直接使用函数调用或者 API 调用的方式，会造成模块之间的耦合，当其中一个模块发生改变时，需要同时修改调用方和被调用方的代码。而使用消息队列作为中间件，不同的模块可以将消息发送到消息队列中，不需要知道具体的接收方是谁，接收方可以独立地消费消息，实现了模块之间的解耦。</span></p>
  <p data-lake-id="u7dc43e02" id="u7dc43e02"><span data-lake-id="ube6fde00" id="ube6fde00">​</span><br></p>
  <p data-lake-id="ud823a56b" id="ud823a56b"><strong><span data-lake-id="u396a1a87" id="u396a1a87">异步</span></strong><span data-lake-id="u1d8135f1" id="u1d8135f1">：有些操作比较耗时，例如发送邮件、生成报表等，如果使用同步的方式处理，会阻塞主线程或者进程，导致系统的性能下降。而使用消息队列，可以将这些操作封装成消息，放入消息队列中，异步地处理这些操作，不影响主流程的执行，提高了系统的性能和响应速度。</span></p>
  <p data-lake-id="uff888231" id="uff888231"><span data-lake-id="ub455a3c8" id="ub455a3c8">​</span><br></p>
  <p data-lake-id="u1f8dda61" id="u1f8dda61"><strong><span data-lake-id="u01d35b26" id="u01d35b26">削峰填谷</span></strong><span data-lake-id="ub6ab379d" id="ub6ab379d">：削峰填谷是一种在高并发场景下平衡系统压力的技术，通常用于平衡系统在高峰期和低谷期的资源利用率，提高系统的吞吐量和响应速度。在削峰填谷的过程中，通常使用消息队列作为缓冲区，将请求放入消息队列中，然后在系统负载低的时候进行处理。这种方式可以将系统的峰值压力分散到较长的时间段内，减少瞬时压力对系统的影响，从而提高系统的稳定性和可靠性。</span></p>
  <p data-lake-id="u2d15affb" id="u2d15affb"><span data-lake-id="u84522c66" id="u84522c66">​</span><br></p>
  <p data-lake-id="u19afda94" id="u19afda94"><span data-lake-id="ud1705a22" id="ud1705a22">另外消息队列还有以下优点：</span></p>
  <p data-lake-id="u0d48e07e" id="u0d48e07e"><br></p>
  <ol list="u7efb353d">
   <li fid="u757c30ef" data-lake-id="u800d1b92" id="u800d1b92"><strong><span data-lake-id="ue4681795" id="ue4681795">可靠性高</span></strong><span data-lake-id="u5fc031da" id="u5fc031da">：消息队列通常具有高可靠性，可以实现消息的持久化存储、消息的备份和故障恢复等功能，保证消息不会丢失。</span></li>
   <li fid="u757c30ef" data-lake-id="u43e41634" id="u43e41634"><strong><span data-lake-id="u9b14ee24" id="u9b14ee24">扩展性好</span></strong><span data-lake-id="u3091c813" id="u3091c813">：通过增加消息队列实例或者添加消费者实例，可以实现消息队列的水平扩展，提高系统的处理能力。</span></li>
   <li fid="u757c30ef" data-lake-id="u33be8dbd" id="u33be8dbd"><strong><span data-lake-id="u71cb88fb" id="u71cb88fb">灵活性高</span></strong><span data-lake-id="u5ca8656e" id="u5ca8656e">：消息队列通常支持多种消息传递模式，如点对点模式和发布/订阅模式，可以根据不同的业务场景选择不同的模式。</span></li>
  </ol>
  <p data-lake-id="u79159844" id="u79159844"><span data-lake-id="u62007fe1" id="u62007fe1">​</span><br></p>
  <h1 data-lake-id="bbe5v" id="bbe5v"><span data-lake-id="ubbb083af" id="ubbb083af">扩展知识</span></h1>
  <h2 data-lake-id="smHZc" id="smHZc"><span data-lake-id="ud7ecba67" id="ud7ecba67">消息队列实现</span></h2>
  <p data-lake-id="u4210b76b" id="u4210b76b"><span data-lake-id="uaef0528a" id="uaef0528a">​</span><br></p>
  <p data-lake-id="u090b10b1" id="u090b10b1"><span data-lake-id="ufb77939e" id="ufb77939e">市面上有很多成熟的消息队列中间件可以供我们使用，其中比较常用的有</span><span data-lake-id="u9ccf3d88" id="u9ccf3d88" style="color: rgb(38, 38, 38)">kafka、activeMQ、RabbitMQ和RocketMQ等。</span></p>
  <p data-lake-id="u51272e2e" id="u51272e2e"><span data-lake-id="u413310a3" id="u413310a3">​</span><br></p>
  <p data-lake-id="u5612e903" id="u5612e903"><span data-lake-id="u1673a7e5" id="u1673a7e5"><br><br></span></p>
 </body>
</html>